package vsvm.data.generators;

import java.util.ArrayList;
import java.util.Random;

import libsvm.svm_node;
import vsvm.data.model.AbstractAttribute;
import vsvm.data.model.AbstractDataModel;
import vsvm.data.model.CategorialAttribute;
import vsvm.data.model.GenericDataModel;
import vsvm.data.model.NumericAttribute;

public class ChessDataGenerator {
	
//	public static svm_problem generateProblem(int nv) {
//		svm_problem p = new svm_problem();
//		p.l = nv;
//		p.y = new double[nv];
//		p.x = new svm_node[nv][];
//		for (int i = 0; i < nv; ++i) {
//			p.x[i] = new svm_node[2];
//			p.x[i][0] = new svm_node();
//			p.x[i][0].index = 0;
//			p.x[i][0].value = Math.random();
//			p.x[i][1] = new svm_node();
//			p.x[i][1].index = 1;
//			p.x[i][1].value = Math.random();
//			p.y[i] = getClass(p.x[i][0].value, p.x[i][1].value);
//		}
//		return p;
//	}
	
	public static AbstractDataModel generateProblem(int nv) {
		return generateProblem(nv, 123456789);		
	}
	
	public static AbstractDataModel generateProblem(int nv, long seed) {
		GenericDataModel d = new GenericDataModel();
		
		ArrayList <AbstractAttribute> a = new ArrayList<AbstractAttribute>();
		NumericAttribute ax = new NumericAttribute("x");
		NumericAttribute ay = new NumericAttribute("y");
		CategorialAttribute ac = new CategorialAttribute("color");
		a.add(ax);	a.add(ay);	a.add(ac);
		d.setAttributes(a);
		
		ArrayList<double[]> data = new ArrayList<double[]>();
		Random r = new Random(seed);
		for (int i = 0; i < nv; ++i) {
			double[] v = new double[3];
			v[0] = r.nextDouble();
			v[1] = r.nextDouble();
			v[2] = getClass(v[0], v[1]);
			data.add(v);
		}
		d.setData(data, 2);
		
		return d;
	}
	
	public static svm_node[] generateTest(boolean cls) {
		return null;
	}
	
	public static double getClass(double x, double y) {
		return ((int)Math.floor(8*x) + (int)Math.floor(8*y))%2 == 1 ? 1 : -1;
	}

}
